﻿using System;
using System.Collections.Generic;
using System.Data.Linq;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;
using GiaoXuLanTranh_MucVu.Models;
using InfoTech.Core.Data.SqlClient;
using InfoTech.Data.Linq;
using InfoTech.LanTranh.MucVu.Bussiness;
using InfoTech.LanTranh.MucVu.Service;
using InfoTech.Mvc.HtmlExtensions;
using InfoTech.Mvc.JqGrid;
using InfoTech.Mvc.JqGrid.LINQ;
using InfoTech.Mvc.LanTranh.MucVu.Models;

namespace GiaoXuLanTranh_MucVu.Areas.AdminCP.Controllers
{
    [Authorize]
    public class MucVuController : Controller
    {

        #region Giáo Phận

        public ActionResult GiaoPhan()
        {
            Header header = new Header();
            header.Common = "ViewUserControl_GiaoPhan_Index";
            header.CurentCommon = "GiaoPhan";
            header.PageTitle = "Giáo Phận - Mục Vụ";
            header.PageHeader = "Danh mục Giáo Phận - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0301";
            ViewData[Header.Key] = header;

            return View();
        }

        public ActionResult Get_List_GiaoPhan()
        {
            GridSettings grid = (GridSettings)GridModelBinder.BindPostModel(HttpContext);
            DataContext dataContext = InfoTech.Core.Service.BaseService.CreateDataContext();
            IQueryable<GIAOPHAN> query = dataContext.GetTable<GIAOPHAN>();

            //filtering
            if (grid.IsSearch)
            {
                //And
                if (grid.Where.groupOp == "AND")
                    foreach (var rule in grid.Where.rules)
                        query = query.Where<GIAOPHAN>(
                            rule.field, rule.data,
                            (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                else
                {
                    //Or
                    var temp = (new List<GIAOPHAN>()).AsQueryable();
                    foreach (var rule in grid.Where.rules)
                    {
                        var t = query.Where<GIAOPHAN>(
                        rule.field, rule.data,
                        (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                        temp = temp.Concat<GIAOPHAN>(t);
                    }
                    //remove repeating records
                    query = temp.Distinct<GIAOPHAN>();
                }
            }

            //sorting
            query = query.OrderBy(grid.SortColumn, grid.SortOrder);

            //count
            var count = query.Count();

            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();

            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = data.Select(c => new GIAOPHANModel(c))
            };
            //convert to JSON and return to client
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        public ActionResult Add_GiaoPhan()
        {
            Header header = new Header();
            header.Common = "ViewUserControl_MucVu_Index";
            header.CurentCommon = "GiaoPhan";
            header.PageTitle = "Thêm Giáo Phận - Mục Vụ";
            header.PageHeader = "Thêm Giáo Phận - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0301";
            ViewData[Header.Key] = header;

            return View();
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult Add_GiaoPhan(GIAOPHANModel giaophanModel)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_MucVu_Index";
            header.CurentCommon = "GiaoPhan";
            header.PageTitle = "Thêm Giáo Phận - Mục Vụ";
            header.PageHeader = "Thêm Giáo Phận - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0301";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                GIAOPHAN giaophan = giaophanModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.INSERT;
                if (GIAOPHANService.Check_Insert_GIAOPHAN(giaophan))
                {
                    Exception exception;
                    giaophan.Insert(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //giaophanModel.NAME = "";

                        ModelState["TENGIAOPHAN"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        giaophanModel.TENGIAOPHAN = "";
                        ModelState["DIACHI"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        giaophanModel.DIACHI = "";
                        ModelState["DIENTHOAI"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        giaophanModel.DIENTHOAI = "";

                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(giaophanModel);
        }

        public ActionResult Edit_GiaoPhan(string id)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_MucVu_Index";
            header.CurentCommon = "GiaoPhan";
            header.PageTitle = "Cập nhật Giáo Phận - Mục Vụ";
            header.PageHeader = "Cập nhật Giáo Phận - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0301";
            ViewData[Header.Key] = header;

            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                GIAOPHAN giaophan = new GIAOPHAN();
                giaophan.MAGIAOPHAN = guid;
                giaophan.SelectbyId();
                if (giaophan.IsPersistence)
                {
                    return View(new GIAOPHANModel(giaophan));
                }
            }
            EXCEPTION exception = new EXCEPTION();
            exception.MESSAGE = "Không tìm thấy thông tin cần cập nhật";
            exception.RESULTTYPE = ResultType.ATTENTION;
            exception.Insert();
            TempData["Result"] = exception.EXCEPTIONID;
            return RedirectToAction("GiaoPhan");
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult Edit_GiaoPhan(GIAOPHANModel giaophanModel)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_MucVu_Index";
            header.CurentCommon = "GiaoPhan";
            header.PageTitle = "Cập nhật Giáo Phận - Mục Vụ";
            header.PageHeader = "Cập nhật Giáo Phận - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0301";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                GIAOPHAN giaophan = giaophanModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.UPDATE;
                if (GIAOPHANService.Check_Update_GIAOPHAN(giaophan))
                {
                    Exception exception;
                    giaophan.UpdatebyId(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //giaophanModel.NAME = "";
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau.";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(giaophanModel);
        }

        public ActionResult Delete_GiaoPhan(string id)
        {
            if (id != null)
            {
                string[] s = id.Split(',');
                bool isError = false;
                if (GIAOPHANService.Check_Delete_GIAOPHAN(s))
                {
                    Guid guid;
                    StringBuilder stringBuilder = new StringBuilder();
                    foreach (string s1 in s)
                    {
                        if (Guid.TryParse(s1, out  guid))
                        {
                            var giaophan = new GIAOPHAN();
                            giaophan.MAGIAOPHAN = guid;
                            Exception exception;
                            giaophan.SelectbyId();
                            if (giaophan.IsPersistence)
                            {
                                // Check service here
                                giaophan.DeletebyId(out exception);
                                if (exception != null)
                                {
                                    isError = true;
                                    stringBuilder.AppendLine(exception.Message);
                                }
                            }
                        }
                    }
                }
                else
                {
                    isError = true;
                }
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.DELETE;
                if (isError)
                {
                    ex.RESULTTYPE = ResultType.ERROR;
                    ex.MESSAGE = "Thông tin cần xóa hiện đang được sử dụng. Vui lòng thử lại sau";
                }
                else
                {
                    ex.RESULTTYPE = ResultType.SUCESS;
                    ex.MESSAGE = "Cập nhật thành công";
                }
                ex.Insert();
                return JavaScript(String.Format("ShowNotification('{0}','{1}');", Url.Action("Index", "UpdateResult", new { area = "AdminCP" }), ex.EXCEPTIONID));
            }
            return Content("");
        }

        #endregion

        #region Giáo Hạt

        public ActionResult GiaoHat()
        {
            Header header = new Header();
            header.Common = "ViewUserControl_GiaoHat_Index";
            header.CurentCommon = "GiaoHat";
            header.PageTitle = "Giáo Hạt - Mục Vụ";
            header.PageHeader = "Danh mục Giáo Hạt - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0302";
            ViewData[Header.Key] = header;

            return View();
        }

        public ActionResult Get_List_GiaoHat()
        {
            GridSettings grid = (GridSettings)GridModelBinder.BindPostModel(HttpContext);
            DataContext dataContext = InfoTech.Core.Service.BaseService.CreateDataContext();
            var query = dataContext.GetTable<GIAOHAT>().Join(dataContext.GetTable<GIAOPHAN>(),
                c => c.MAGIAOPHAN, v => v.MAGIAOPHAN,
                (c, v) => new { c.MAGIAOHAT, c.TENGIAOHAT, c.DIACHI, c.DIENTHOAI, v.TENGIAOPHAN });

            //filter
            query = query.Where(grid);

            //sorting
            query = query.OrderBy(grid.SortColumn, grid.SortOrder);

            //count
            var count = query.Count();

            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();

            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = data
            };
            //convert to JSON and return to client
            return Json(result, JsonRequestBehavior.AllowGet);
        }


        public ActionResult Add_GiaoHat()
        {
            Header header = new Header();
            header.Common = "ViewUserControl_MucVu_Index";
            header.CurentCommon = "GiaoHat";
            header.PageTitle = "Giáo Hạt - Mục Vụ";
            header.PageHeader = "Thêm Giáo Hạt - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0302";
            ViewData[Header.Key] = header;

            return View();
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult Add_GiaoHat(GIAOHATModel giaohatModel)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_MucVu_Index";
            header.CurentCommon = "GiaoHat";
            header.PageTitle = "Giáo Hạt - Mục Vụ";
            header.PageHeader = "Thêm Giáo Hạt - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0302";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                GIAOHAT giaohat = giaohatModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.INSERT;
                if (GIAOHATService.Check_Insert_GIAOHAT(giaohat))
                {
                    Exception exception;
                    giaohat.Insert(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //giaohatModel.NAME = "";

                        ModelState["TENGIAOHAT"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        giaohatModel.TENGIAOHAT = "";
                        ModelState["DIACHI"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        giaohatModel.DIACHI = "";
                        ModelState["DIENTHOAI"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        giaohatModel.DIENTHOAI = "";

                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(giaohatModel);
        }

        public ActionResult Edit_GiaoHat(string id)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_MucVu_Index";
            header.CurentCommon = "GiaoHat";
            header.PageTitle = "Giáo Hạt - Mục Vụ";
            header.PageHeader = "Cập nhật Giáo Hạt - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0302";
            ViewData[Header.Key] = header;

            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                GIAOHAT giaohat = new GIAOHAT();
                giaohat.MAGIAOHAT = guid;
                giaohat.SelectbyId();
                if (giaohat.IsPersistence)
                {
                    return View(new GIAOHATModel(giaohat));
                }
            }
            EXCEPTION exception = new EXCEPTION();
            exception.MESSAGE = "Không tìm thấy thông tin cần cập nhật";
            exception.RESULTTYPE = ResultType.ATTENTION;
            exception.Insert();
            TempData["Result"] = exception.EXCEPTIONID;
            return RedirectToAction("GiaoHat");
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult Edit_GiaoHat(GIAOHATModel giaohatModel)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_MucVu_Index";
            header.CurentCommon = "GiaoHat";
            header.PageTitle = "Giáo Hạt - Mục Vụ";
            header.PageHeader = "Cập nhật Giáo Hạt - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0302";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                GIAOHAT giaohat = giaohatModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.UPDATE;
                if (GIAOHATService.Check_Update_GIAOHAT(giaohat))
                {
                    Exception exception;
                    giaohat.UpdatebyId(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //giaohatModel.NAME = "";
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau.";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(giaohatModel);
        }

        public ActionResult Delete_GiaoHat(string id)
        {
            if (id != null)
            {
                string[] s = id.Split(',');
                bool isError = false;
                if (GIAOHATService.Check_Delete_GIAOHAT(s))
                {
                    Guid guid;
                    StringBuilder stringBuilder = new StringBuilder();
                    foreach (string s1 in s)
                    {
                        if (Guid.TryParse(s1, out  guid))
                        {
                            var giaohat = new GIAOHAT();
                            giaohat.MAGIAOHAT = guid;
                            Exception exception;
                            giaohat.SelectbyId();
                            if (giaohat.IsPersistence)
                            {
                                // Check service here
                                giaohat.DeletebyId(out exception);
                                if (exception != null)
                                {
                                    isError = true;
                                    stringBuilder.AppendLine(exception.Message);
                                }
                            }
                        }
                    }
                }
                else
                {
                    isError = true;
                }
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.DELETE;
                if (isError)
                {
                    ex.RESULTTYPE = ResultType.ERROR;
                    ex.MESSAGE = "Thông tin cần xóa hiện đang được sử dụng. Vui lòng thử lại sau";
                }
                else
                {
                    ex.RESULTTYPE = ResultType.SUCESS;
                    ex.MESSAGE = "Cập nhật thành công";
                }
                ex.Insert();
                return JavaScript(String.Format("ShowNotification('{0}','{1}');", Url.Action("Index", "UpdateResult", new { area = "AdminCP" }), ex.EXCEPTIONID));
            }
            return Content("");
        }

        #endregion

        #region Giáo Xứ

        public ActionResult GiaoXu(string id1, string id2)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_GiaoXu_Index";
            header.CurentCommon = "GiaoXu";
            header.PageTitle = "Giáo Xứ - Mục Vụ";
            header.PageHeader = "Danh mục Giáo Xứ - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0303";
            ViewData[Header.Key] = header;

            ViewData["ID1"] = id1;
            ViewData["ID2"] = id2;
            return View();
        }

        public ActionResult Get_List_GiaoXu()
        {
            GridSettings grid = (GridSettings)GridModelBinder.BindPostModel(HttpContext);
            DataContext dataContext = InfoTech.Core.Service.BaseService.CreateDataContext();
            var query =
                    dataContext.GetTable<GIAOHAT>()
                    .Join(dataContext.GetTable<GIAOPHAN>(), c => c.MAGIAOPHAN, v => v.MAGIAOPHAN, (c, v) => new { c.TENGIAOHAT, v.TENGIAOPHAN, c.MAGIAOHAT })
                    .Join(dataContext.GetTable<GIAOXU>(), c => c.MAGIAOHAT, v => v.MAGIAOHAT, (c, v) => new { v.MAGIAOXU, v.TENGIAOXU, v.DIACHI, v.DIENTHOAI, c.TENGIAOHAT, c.TENGIAOPHAN });

            //filtering
            query = query.Where(grid);

            //sorting
            query = query.OrderBy(grid.SortColumn, grid.SortOrder);

            //count
            var count = query.Count();

            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();

            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = data
            };
            //convert to JSON and return to client
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        public ActionResult Add_GiaoXu()
        {
            Header header = new Header();
            header.Common = "ViewUserControl_GiaoXu_Index";
            header.CurentCommon = "GiaoXu";
            header.PageTitle = "Giáo Xứ - Mục Vụ";
            header.PageHeader = "Thêm Giáo Xứ - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0303";
            ViewData[Header.Key] = header;

            return View();
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult Add_GiaoXu(GIAOXUModel giaoxuModel)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_GiaoXu_Index";
            header.CurentCommon = "GiaoXu";
            header.PageTitle = "Giáo Xứ - Mục Vụ";
            header.PageHeader = "Thêm Giáo Xứ - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0303";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                GIAOXU giaoxu = giaoxuModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.INSERT;
                if (GIAOXUService.Check_Insert_GIAOXU(giaoxu))
                {
                    Exception exception;
                    giaoxu.Insert(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //giaoxuModel.NAME = "";

                        ModelState["TENGIAOXU"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        giaoxuModel.TENGIAOXU = "";
                        ModelState["DIACHI"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        giaoxuModel.DIACHI = "";
                        ModelState["DIENTHOAI"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        giaoxuModel.DIENTHOAI = "";

                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(giaoxuModel);
        }

        public ActionResult Edit_GiaoXu(string id)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_GiaoXu_Index";
            header.CurentCommon = "GiaoXu";
            header.PageTitle = "Giáo Xứ - Mục Vụ";
            header.PageHeader = "Cập nhật Giáo Xứ - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0303";
            ViewData[Header.Key] = header;

            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                GIAOXU giaoxu = new GIAOXU();
                giaoxu.MAGIAOXU = guid;
                giaoxu.SelectbyId();
                if (giaoxu.IsPersistence)
                {
                    return View(new GIAOXUModel(giaoxu));
                }
            }
            EXCEPTION exception = new EXCEPTION();
            exception.MESSAGE = "Không tìm thấy thông tin cần cập nhật";
            exception.RESULTTYPE = ResultType.ATTENTION;
            exception.Insert();
            TempData["Result"] = exception.EXCEPTIONID;
            return RedirectToAction("GiaoXu");
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult Edit_GiaoXu(GIAOXUModel giaoxuModel)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_GiaoXu_Index";
            header.CurentCommon = "GiaoXu";
            header.PageTitle = "Giáo Xứ - Mục Vụ";
            header.PageHeader = "Cập nhật Giáo Xứ - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0303";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                GIAOXU giaoxu = giaoxuModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.UPDATE;
                if (GIAOXUService.Check_Update_GIAOXU(giaoxu))
                {
                    Exception exception;
                    giaoxu.UpdatebyId(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //giaoxuModel.NAME = "";
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau.";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(giaoxuModel);
        }

        public ActionResult Delete_GiaoXu(string id)
        {
            if (id != null)
            {
                string[] s = id.Split(',');
                bool isError = false;
                if (GIAOXUService.Check_Delete_GIAOXU(s))
                {
                    Guid guid;
                    StringBuilder stringBuilder = new StringBuilder();
                    foreach (string s1 in s)
                    {
                        if (Guid.TryParse(s1, out  guid))
                        {
                            var giaoxu = new GIAOXU();
                            giaoxu.MAGIAOXU = guid;
                            Exception exception;
                            giaoxu.SelectbyId();
                            if (giaoxu.IsPersistence)
                            {
                                // Check service here
                                giaoxu.DeletebyId(out exception);
                                if (exception != null)
                                {
                                    isError = true;
                                    stringBuilder.AppendLine(exception.Message);
                                }
                            }
                        }
                    }
                }
                else
                {
                    isError = true;
                }
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.DELETE;
                if (isError)
                {
                    ex.RESULTTYPE = ResultType.ERROR;
                    ex.MESSAGE = "Thông tin cần xóa hiện đang được sử dụng. Vui lòng thử lại sau";
                }
                else
                {
                    ex.RESULTTYPE = ResultType.SUCESS;
                    ex.MESSAGE = "Cập nhật thành công";
                }
                ex.Insert();
                return JavaScript(String.Format("ShowNotification('{0}','{1}');", Url.Action("Index", "UpdateResult", new { area = "AdminCP" }), ex.EXCEPTIONID));
            }
            return Content("");
        }

        #endregion

        #region Giáo Họ

        public ActionResult GiaoHo(string id1, string id2, string id3)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_GiaoHo_Index";
            header.CurentCommon = "GiaoHo";
            header.PageTitle = "Giáo Họ - Mục Vụ";
            header.PageHeader = "Danh mục Giáo Họ - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0304";
            ViewData[Header.Key] = header;

            return View();
        }

        public ActionResult Get_List_GiaoHo()
        {
            GridSettings grid = (GridSettings)GridModelBinder.BindPostModel(HttpContext);
            DataContext dataContext = InfoTech.Core.Service.BaseService.CreateDataContext();
            var query =
                dataContext.GetTable<GIAOPHAN>()
                    .Join(
                        dataContext.GetTable<GIAOHAT>(),
                        c => c.MAGIAOPHAN, v => v.MAGIAOPHAN, (c, v) => new { v.MAGIAOHAT, c.TENGIAOPHAN, v.TENGIAOHAT })
                    .Join(dataContext.GetTable<GIAOXU>(),
                          c => c.MAGIAOHAT, v => v.MAGIAOHAT, (c, v) => new { v.MAGIAOXU, v.TENGIAOXU, c.TENGIAOHAT, c.TENGIAOPHAN })
                    .Join(dataContext.GetTable<GIAOHO>(), c => c.MAGIAOXU, v => v.MAGIAOXU, (c, v) => new { v.MAGIAOHO, v.MAHOID, v.TENGIAOHO, v.DIENTHOAI, c.TENGIAOXU, c.TENGIAOHAT, c.TENGIAOPHAN });

            //filtering
            query = query.Where(grid);

            //sorting
            query = query.OrderBy(grid.SortColumn, grid.SortOrder);

            //count
            var count = query.Count();

            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();

            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = data
            };
            //convert to JSON and return to client
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        public ActionResult Add_GiaoHo()
        {
            Header header = new Header();
            header.Common = "ViewUserControl_MucVu_Index";
            header.CurentCommon = "GiaoHo";
            header.PageTitle = "Giáo Họ - Mục Vụ";
            header.PageHeader = "Thêm Giáo Họ - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0304";
            ViewData[Header.Key] = header;

            return View();
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult Add_GiaoHo(GIAOHOModel giaohoModel)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_MucVu_Index";
            header.CurentCommon = "GiaoHo";
            header.PageTitle = "Giáo Họ - Mục Vụ";
            header.PageHeader = "Thêm Giáo Họ - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0304";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                GIAOHO giaoho = giaohoModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.INSERT;
                if (GIAOHOService.Check_Insert_GIAOHO(giaoho))
                {
                    Exception exception;
                    giaoho.Insert(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //giaohoModel.NAME = "";

                        ModelState["TENGIAOHO"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        giaohoModel.TENGIAOHO = "";
                        ModelState["DIENTHOAI"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        giaohoModel.DIENTHOAI = "";
                        ModelState["MAHOID"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        giaohoModel.MAHOID = "";

                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ModelState.AddModelError("TENGIAOHO", "");
                    ModelState.AddModelError("MAHOID", "");
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(giaohoModel);
        }

        public ActionResult Edit_GiaoHo(string id)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_MucVu_Index";
            header.CurentCommon = "GiaoHo";
            header.PageTitle = "Giáo Họ - Mục Vụ";
            header.PageHeader = "Cập nhật Giáo Họ - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0304";
            ViewData[Header.Key] = header;

            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                GIAOHO giaoho = new GIAOHO();
                giaoho.MAGIAOHO = guid;
                giaoho.SelectbyId();
                if (giaoho.IsPersistence)
                {
                    return View(new GIAOHOModel(giaoho));
                }
            }
            EXCEPTION exception = new EXCEPTION();
            exception.MESSAGE = "Không tìm thấy thông tin cần cập nhật";
            exception.RESULTTYPE = ResultType.ATTENTION;
            exception.Insert();
            TempData["Result"] = exception.EXCEPTIONID;
            return RedirectToAction("GiaoHo");
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult Edit_GiaoHo(GIAOHOModel giaohoModel)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_MucVu_Index";
            header.CurentCommon = "GiaoHo";
            header.PageTitle = "Giáo Họ - Mục Vụ";
            header.PageHeader = "Cập nhật Giáo Họ - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0304";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                GIAOHO giaoho = giaohoModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.UPDATE;
                if (GIAOHOService.Check_Update_GIAOHO(giaoho))
                {
                    Exception exception;
                    giaoho.UpdatebyId(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //giaohoModel.NAME = "";
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ModelState.AddModelError("TENGIAOHO", "");
                    ModelState.AddModelError("MAHOID", "");
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau.";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(giaohoModel);
        }

        public ActionResult Delete_GiaoHo(string id)
        {
            if (id != null)
            {
                string[] s = id.Split(',');
                bool isError = false;
                if (GIAOHOService.Check_Delete_GIAOHO(s))
                {
                    Guid guid;
                    StringBuilder stringBuilder = new StringBuilder();
                    foreach (string s1 in s)
                    {
                        if (Guid.TryParse(s1, out  guid))
                        {
                            var giaoho = new GIAOHO();
                            giaoho.MAGIAOHO = guid;
                            Exception exception;
                            giaoho.SelectbyId();
                            if (giaoho.IsPersistence)
                            {
                                // Check service here
                                giaoho.DeletebyId(out exception);
                                if (exception != null)
                                {
                                    isError = true;
                                    stringBuilder.AppendLine(exception.Message);
                                }
                            }
                        }
                    }
                }
                else
                {
                    isError = true;
                }
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.DELETE;
                if (isError)
                {
                    ex.RESULTTYPE = ResultType.ERROR;
                    ex.MESSAGE = "Thông tin cần xóa hiện đang được sử dụng. Vui lòng thử lại sau";
                }
                else
                {
                    ex.RESULTTYPE = ResultType.SUCESS;
                    ex.MESSAGE = "Cập nhật thành công";
                }
                ex.Insert();
                return JavaScript(String.Format("ShowNotification('{0}','{1}');", Url.Action("Index", "UpdateResult", new { area = "AdminCP" }), ex.EXCEPTIONID));
            }
            return Content("");
        }

        #endregion

        #region Linh Mục

        public ActionResult LinhMuc()
        {
            Header header = new Header();
            header.Common = "ViewUserControl_LinhMuc_Index";
            header.CurentCommon = "LinhMuc";
            header.PageTitle = "Linh Mục - Mục Vụ";
            header.PageHeader = "Danh Mục Linh Mục - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0305";
            ViewData[Header.Key] = header;

            return View();
        }

        public ActionResult Get_List_LinhMuc()
        {
            GridSettings grid = (GridSettings)GridModelBinder.BindPostModel(HttpContext);
            DataContext dataContext = InfoTech.Core.Service.BaseService.CreateDataContext();
            IQueryable<dynamic> query;
            if (typeof(LINHMUC_CHUCVU).CheckPropertyInfo(grid))
                query = dataContext.GetTable<LINHMUC>().Where(grid).Join(dataContext.GetTable<LINHMUC_CHUCVU>().Where(grid), c => c.MACHUCVU,
                                                          v => v.MACHUCVU, (c, v) => new
                                                                        {
                                                                            c.MACHAXU,
                                                                            c.TENTHANH,
                                                                            c.HOVATENDEM,
                                                                            c.TEN,
                                                                            c.DIENTHOAI,
                                                                            NAMSINH = c.GetBirthDay(),
                                                                            v.TENCHUCVU
                                                                        });
            else
                query = dataContext.GetTable<LINHMUC>().Where(grid).GroupJoin(dataContext.GetTable<LINHMUC_CHUCVU>(), c => c.MACHUCVU,
                                                          v => v.MACHUCVU, (c, s) => new { c, s }).SelectMany(
                                                              @t => @t.s.DefaultIfEmpty(), (@t, d) => new
                                                              {
                                                                  @t.c.
                                                              MACHAXU,
                                                                  @t.c.
                                                              TENTHANH,
                                                                  @t.c.
                                                              HOVATENDEM,
                                                                  @t.c.TEN,
                                                                  @t.c.
                                                              DIENTHOAI,
                                                                  NAMSINH =
                                                              @t.c.
                                                              GetBirthDay(),
                                                                  d.TENCHUCVU
                                                              });

            //filtering
            //query = query.Where(grid);

            //sorting
            query = query.OrderBy(grid);

            //count
            var count = query.Count();

            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();

            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = data
            };
            //convert to JSON and return to client
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        public ActionResult AddLinhMuc()
        {
            Header header = new Header();
            header.Common = "ViewUserControl_MucVu_Index";
            header.CurentCommon = "LinhMuc";
            header.PageTitle = "Linh Mục - Mục Vụ";
            header.PageHeader = "Thêm Linh Mục - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0305";
            ViewData[Header.Key] = header;

            return View();
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult AddLinhMuc(LINHMUCModel linhmucModel)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_MucVu_Index";
            header.CurentCommon = "LinhMuc";
            header.PageTitle = "Linh Mục - Mục Vụ";
            header.PageHeader = "Thêm Linh Mục - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0305";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                LINHMUC linhmuc = linhmucModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.INSERT;
                if (LINHMUCService.Check_Insert_LINHMUC(linhmuc))
                {
                    Exception exception;
                    linhmuc.Insert(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //linhmucModel.NAME = "";
                        linhmucModel.TENTHANH = "";
                        ModelState["TENTHANH"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        linhmucModel.HOVATENDEM = "";
                        ModelState["HOVATENDEM"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        linhmucModel.TEN = "";
                        ModelState["TEN"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        linhmucModel.DIACHI = "";
                        ModelState["DIACHI"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        linhmucModel.DIENTHOAI = "";
                        ModelState["DIENTHOAI"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        linhmucModel.NGAYSINH = null;
                        ModelState["NGAYSINH"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        linhmucModel.THANGSINH = null;
                        ModelState["THANGSINH"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        linhmucModel.NAMSINH = null;
                        ModelState["NAMSINH"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);

                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(linhmucModel);
        }

        public ActionResult EditLinhMuc(string id)
        {
            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                LINHMUC linhmuc = new LINHMUC();
                linhmuc.MACHAXU = guid;
                linhmuc.SelectbyId();
                if (linhmuc.IsPersistence)
                {
                    Header header = new Header();
                    header.Common = "ViewUserControl_MucVu_Index";
                    header.CurentCommon = "LinhMuc";
                    header.PageTitle = "Linh Mục - Mục Vụ";
                    header.PageHeader = "Cập nhật Linh Mục - Mục Vụ";
                    header.Menulv1 = "03";
                    header.Menulv2 = "0305";
                    ViewData[Header.Key] = header;

                    return View(new LINHMUCModel(linhmuc));
                }
            }
            EXCEPTION exception = new EXCEPTION();
            exception.MESSAGE = "Không tìm thấy thông tin cần cập nhật";
            exception.RESULTTYPE = ResultType.ATTENTION;
            exception.Insert();
            TempData["Result"] = exception.EXCEPTIONID;
            return RedirectToAction("LinhMuc");
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult EditLinhMuc(LINHMUCModel linhmucModel)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_MucVu_Index";
            header.CurentCommon = "LinhMuc";
            header.PageTitle = "Linh Mục - Mục Vụ";
            header.PageHeader = "Cập nhật Linh Mục - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0305";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                LINHMUC linhmuc = linhmucModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.UPDATE;
                if (LINHMUCService.Check_Update_LINHMUC(linhmuc))
                {
                    Exception exception;
                    linhmuc.UpdatebyId(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //linhmucModel.NAME = "";
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau.";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(linhmucModel);
        }

        public ActionResult DeleteLinhMuc(string id)
        {
            if (id != null)
            {
                string[] s = id.Split(',');
                bool isError = false;
                if (LINHMUCService.Check_Delete_LINHMUC(s))
                {
                    Guid guid;
                    StringBuilder stringBuilder = new StringBuilder();
                    foreach (string s1 in s)
                    {
                        if (Guid.TryParse(s1, out  guid))
                        {
                            var linhmuc = new LINHMUC();
                            linhmuc.MACHAXU = guid;
                            Exception exception;
                            linhmuc.SelectbyId();
                            if (linhmuc.IsPersistence)
                            {
                                // Check service here
                                linhmuc.DeletebyId(out exception);
                                if (exception != null)
                                {
                                    isError = true;
                                    stringBuilder.AppendLine(exception.Message);
                                }
                            }
                        }
                    }
                }
                else
                {
                    isError = true;
                }
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.DELETE;
                if (isError)
                {
                    ex.RESULTTYPE = ResultType.ERROR;
                    ex.MESSAGE = "Thông tin cần xóa hiện đang được sử dụng. Vui lòng thử lại sau";
                }
                else
                {
                    ex.RESULTTYPE = ResultType.SUCESS;
                    ex.MESSAGE = "Cập nhật thành công";
                }
                ex.Insert();
                return JavaScript(String.Format("ShowNotification('{0}','{1}');", Url.Action("Index", "UpdateResult", new { area = "AdminCP" }), ex.EXCEPTIONID));
            }
            return Content("");
        }

        #endregion

        #region Chuc Vu

        public ActionResult ChucVu()
        {
            Header header = new Header();
            header.Common = "ViewUserControl_ChucVu_Index";
            header.CurentCommon = "ChucVu";
            header.PageTitle = "Chức Vụ - Mục Vụ";
            header.PageHeader = "Danh Mục Chức Vụ - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0306";
            ViewData[Header.Key] = header;

            return View();
        }

        public ActionResult Get_List_ChucVu()
        {
            GridSettings grid = (GridSettings)GridModelBinder.BindPostModel(HttpContext);
            DataContext dataContext = InfoTech.Core.Service.BaseService.CreateDataContext();
            IQueryable<LINHMUC_CHUCVU> query = dataContext.GetTable<LINHMUC_CHUCVU>();

            //filtering
            if (grid.IsSearch)
            {
                //And
                if (grid.Where.groupOp == "AND")
                    foreach (var rule in grid.Where.rules)
                        query = query.Where<LINHMUC_CHUCVU>(
                            rule.field, rule.data,
                            (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                else
                {
                    //Or
                    var temp = (new List<LINHMUC_CHUCVU>()).AsQueryable();
                    foreach (var rule in grid.Where.rules)
                    {
                        var t = query.Where<LINHMUC_CHUCVU>(
                        rule.field, rule.data,
                        (WhereOperation)StringEnum.Parse(typeof(WhereOperation), rule.op));
                        temp = temp.Concat<LINHMUC_CHUCVU>(t);
                    }
                    //remove repeating records
                    query = temp.Distinct<LINHMUC_CHUCVU>();
                }
            }

            //sorting
            query = query.OrderBy(grid.SortColumn, grid.SortOrder);

            //count
            var count = query.Count();

            //paging
            var data = query.Skip((grid.PageIndex - 1) * grid.PageSize).Take(grid.PageSize).ToArray();

            //converting in grid format
            var result = new
            {
                total = (int)Math.Ceiling((double)count / grid.PageSize),
                page = grid.PageIndex,
                records = count,
                rows = data.Select(c => new LINHMUC_CHUCVUModel(c))
            };
            //convert to JSON and return to client
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        public ActionResult AddChucVu()
        {
            Header header = new Header();
            header.Common = "ViewUserControl_MucVu_Index";
            header.CurentCommon = "ChucVu";
            header.PageTitle = "Chức Vụ - Mục Vụ";
            header.PageHeader = "Thêm Chức Vụ - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0306";
            ViewData[Header.Key] = header;

            return View();
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult AddChucVu(LINHMUC_CHUCVUModel linhmucChucVuModel)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_MucVu_Index";
            header.CurentCommon = "ChucVu";
            header.PageTitle = "Chức Vụ - Mục Vụ";
            header.PageHeader = "Thêm Chức Vụ - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0306";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                LINHMUC_CHUCVU linhmucChucVu = linhmucChucVuModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.INSERT;
                if (LINHMUC_CHUCVUService.Check_Insert_LINHMUC_CHUCVU(linhmucChucVu))
                {
                    Exception exception;
                    linhmucChucVu.Insert(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //linhmucChucVuModel.NAME = "";
                        linhmucChucVuModel.TENCHUCVU = "";
                        ModelState["TENCHUCVU"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);
                        linhmucChucVuModel.PRIORITY = null;
                        ModelState["PRIORITY"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);

                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(linhmucChucVuModel);
        }

        public ActionResult EditChucVu(string id)
        {
            Guid guid;
            if (Guid.TryParse(id, out guid))
            {
                LINHMUC_CHUCVU linhmucChucvu = new LINHMUC_CHUCVU();
                linhmucChucvu.MACHUCVU = guid;
                linhmucChucvu.SelectbyId();
                if (linhmucChucvu.IsPersistence)
                {
                    Header header = new Header();
                    header.Common = "ViewUserControl_MucVu_Index";
                    header.CurentCommon = "ChucVu";
                    header.PageTitle = "Chức Vụ - Mục Vụ";
                    header.PageHeader = "Cập Nhật Chức Vụ - Mục Vụ";
                    header.Menulv1 = "03";
                    header.Menulv2 = "0306";
                    ViewData[Header.Key] = header;

                    return View(new LINHMUC_CHUCVUModel(linhmucChucvu));
                }
            }
            EXCEPTION exception = new EXCEPTION();
            exception.MESSAGE = "Không tìm thấy thông tin cần cập nhật";
            exception.RESULTTYPE = ResultType.ATTENTION;
            exception.Insert();
            TempData["Result"] = exception.EXCEPTIONID;
            return RedirectToAction("ChucVu");
        }

        [ValidateInput(false)]
        [HttpPost]
        public ActionResult EditChucVu(LINHMUC_CHUCVUModel linhmucChucVuModel)
        {
            Header header = new Header();
            header.Common = "ViewUserControl_MucVu_Index";
            header.CurentCommon = "ChucVu";
            header.PageTitle = "Chức Vụ - Mục Vụ";
            header.PageHeader = "Cập Nhật Chức Vụ - Mục Vụ";
            header.Menulv1 = "03";
            header.Menulv2 = "0306";
            ViewData[Header.Key] = header;

            if (ModelState.IsValid)
            {
                LINHMUC_CHUCVU linhmucChucVu = linhmucChucVuModel;
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.UPDATE;
                if (LINHMUC_CHUCVUService.Check_Update_LINHMUC_CHUCVU(linhmucChucVu))
                {
                    Exception exception;
                    linhmucChucVu.UpdatebyId(out exception);
                    if (exception == null)
                    {
                        //ModelState["NAME"].Value = new ValueProviderResult(null, string.Empty, CultureInfo.InvariantCulture);			
                        //linhmucChucVuModel.NAME = "";
                        ex.RESULTTYPE = ResultType.SUCESS;
                        ex.MESSAGE = "Cập nhật thành công";
                    }
                    else
                    {
                        ex.MESSAGE = exception.Message;
                        ex.RESULTTYPE = ResultType.ERROR;
                    }
                }
                else
                {
                    ex.RESULTTYPE = ResultType.ATTENTION;
                    ex.MESSAGE = "Thông tin này đã tồn tại. Vui lòng thử lại sau.";
                }
                ex.Insert();
                ViewData["Result"] = ex.EXCEPTIONID;
            }
            return View(linhmucChucVuModel);
        }

        public ActionResult DeleteChucVu(string id)
        {
            if (id != null)
            {
                string[] s = id.Split(',');
                bool isError = false;
                if (LINHMUC_CHUCVUService.Check_Delete_LINHMUC_CHUCVU(s))
                {
                    Guid guid;
                    StringBuilder stringBuilder = new StringBuilder();
                    foreach (string s1 in s)
                    {
                        if (Guid.TryParse(s1, out  guid))
                        {
                            var linhmucChucvu = new LINHMUC_CHUCVU();
                            linhmucChucvu.MACHUCVU = guid;
                            Exception exception;
                            linhmucChucvu.SelectbyId();
                            if (linhmucChucvu.IsPersistence)
                            {
                                // Check service here
                                LINHMUC_CHUCVUService.Delete(linhmucChucvu);

                                linhmucChucvu.DeletebyId(out exception);
                                if (exception != null)
                                {
                                    isError = true;
                                    stringBuilder.AppendLine(exception.Message);
                                }
                            }
                        }
                    }
                }
                else
                {
                    isError = true;
                }
                EXCEPTION ex = new EXCEPTION();
                ex.UPDATETYPE = UpdateType.DELETE;
                if (isError)
                {
                    ex.RESULTTYPE = ResultType.ERROR;
                    ex.MESSAGE = "Thông tin cần xóa hiện đang được sử dụng. Vui lòng thử lại sau";
                }
                else
                {
                    ex.RESULTTYPE = ResultType.SUCESS;
                    ex.MESSAGE = "Cập nhật thành công";
                }
                ex.Insert();
                return JavaScript(String.Format("ShowNotification('{0}','{1}');", Url.Action("Index", "UpdateResult", new { area = "AdminCP" }), ex.EXCEPTIONID));
            }
            return Content("");
        }

        #endregion

    }
}
